package com.ruirui.demo;

import reactor.core.publisher.Flux;

/**
 *自定义 流中处理规则 handle  = map + filter
 */
public class FluxHandle {
    public static void main(String[] args) {
        Flux.range(1, 5)
                .handle((value, sink) -> {
                    sink.next(value+"张三");
                })
                .log()
                .subscribe(System.out::println);

        Flux.range(1, 5)
                .map(value->"张三"+value)
                .log()
                .subscribe(System.out::println);
        /**
         * | 比较项    | `.handle()`                       | `.map()`       |
         * | ------ | --------------------------------- | -------------- |
         * | 是否必须发射 | ✅ 必须手动调用 `sink.next()` 否则不会继续流    | ❌ 自动把转换结果传给下游  |
         * | 是否支持过滤 | ✅ 可不调用 `sink.next()` 以跳过某些值（过滤功能） | ❌ 不支持过滤，只能一一映射 |
         * | 场景     | 条件性发射、复杂逻辑（如：某些值不要、多个值合成一个）       | 简单一对一数据转换      |
         */
    }
}
